{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.        ,  0.52631579,  1.05263158,  1.57894737,  2.10526316,\n",
       "        2.63157895,  3.15789474,  3.68421053,  4.21052632,  4.73684211,\n",
       "        5.26315789,  5.78947368,  6.31578947,  6.84210526,  7.36842105,\n",
       "        7.89473684,  8.42105263,  8.94736842,  9.47368421, 10.        ])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np  # 导入包\n",
    "import matplotlib.pyplot as plt\n",
    "import statsmodels.api as sm\n",
    "\n",
    "nsample = 20  #生成20个样本点\n",
    "x = np.linspace(0, 10, nsample)  # 从0-10之间生成20个数\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**一元线性回归**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.        ,  0.        ],\n",
       "       [ 1.        ,  0.52631579],\n",
       "       [ 1.        ,  1.05263158],\n",
       "       [ 1.        ,  1.57894737],\n",
       "       [ 1.        ,  2.10526316],\n",
       "       [ 1.        ,  2.63157895],\n",
       "       [ 1.        ,  3.15789474],\n",
       "       [ 1.        ,  3.68421053],\n",
       "       [ 1.        ,  4.21052632],\n",
       "       [ 1.        ,  4.73684211],\n",
       "       [ 1.        ,  5.26315789],\n",
       "       [ 1.        ,  5.78947368],\n",
       "       [ 1.        ,  6.31578947],\n",
       "       [ 1.        ,  6.84210526],\n",
       "       [ 1.        ,  7.36842105],\n",
       "       [ 1.        ,  7.89473684],\n",
       "       [ 1.        ,  8.42105263],\n",
       "       [ 1.        ,  8.94736842],\n",
       "       [ 1.        ,  9.47368421],\n",
       "       [ 1.        , 10.        ]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = sm.add_constant(x)  # 生成第一列都是1，第二列是原始数据\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 5])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#β0，β1分别设置成2，5\n",
    "beta = np.array([2,5])\n",
    "beta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.44917782, -0.7881134 , -0.41908437,  0.03441592, -1.52404766,\n",
       "       -0.00416825, -0.65333685,  1.67840733,  1.52347633, -0.43867697,\n",
       "        0.22222029,  0.61150455, -2.23946729,  1.22670988,  0.17836627,\n",
       "        0.66150276, -1.77887457,  0.37328361,  1.94511935, -0.05179077])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#构造一个高斯分布的误差项\n",
    "e = np.random.normal(size = nsample)\n",
    "e"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.55082218,  3.84346555,  6.84407352,  9.92915276, 11.00226813,\n",
       "       15.15372648, 17.13613683, 22.09945996, 24.57610791, 25.24553356,\n",
       "       28.53800976, 31.55887297, 31.33948008, 37.4372362 , 39.02047153,\n",
       "       42.13518697, 42.32638858, 47.11012572, 51.3135404 , 51.94820923])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#实际值y\n",
    "y = np.dot(X, beta) + e\n",
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "#最小二乘法\n",
    "model = sm.OLS(y, X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#拟合数据\n",
    "res = model.fit()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.58035731, 5.08501122])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#回归系数\n",
    "res.params  # 求出的结果就是β0和β1，会有一些差距，因为数据点比较少，可以早多点数据点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<caption>OLS Regression Results</caption>\n",
       "<tr>\n",
       "  <th>Dep. Variable:</th>            <td>y</td>        <th>  R-squared:         </th> <td>   0.995</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Model:</th>                   <td>OLS</td>       <th>  Adj. R-squared:    </th> <td>   0.995</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Method:</th>             <td>Least Squares</td>  <th>  F-statistic:       </th> <td>   3853.</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Date:</th>             <td>Mon, 09 Nov 2020</td> <th>  Prob (F-statistic):</th> <td>1.89e-22</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Time:</th>                 <td>21:52:46</td>     <th>  Log-Likelihood:    </th> <td> -29.445</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>No. Observations:</th>      <td>    20</td>      <th>  AIC:               </th> <td>   62.89</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Df Residuals:</th>          <td>    18</td>      <th>  BIC:               </th> <td>   64.88</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Df Model:</th>              <td>     1</td>      <th>                     </th>     <td> </td>   \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Covariance Type:</th>      <td>nonrobust</td>    <th>                     </th>     <td> </td>   \n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "    <td></td>       <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>const</th> <td>    1.5804</td> <td>    0.479</td> <td>    3.298</td> <td> 0.004</td> <td>    0.574</td> <td>    2.587</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>x1</th>    <td>    5.0850</td> <td>    0.082</td> <td>   62.075</td> <td> 0.000</td> <td>    4.913</td> <td>    5.257</td>\n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "  <th>Omnibus:</th>       <td> 1.296</td> <th>  Durbin-Watson:     </th> <td>   2.429</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Prob(Omnibus):</th> <td> 0.523</td> <th>  Jarque-Bera (JB):  </th> <td>   0.560</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Skew:</th>          <td>-0.408</td> <th>  Prob(JB):          </th> <td>   0.756</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Kurtosis:</th>      <td> 3.073</td> <th>  Cond. No.          </th> <td>    11.5</td>\n",
       "</tr>\n",
       "</table><br/><br/>Warnings:<br/>[1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.summary.Summary'>\n",
       "\"\"\"\n",
       "                            OLS Regression Results                            \n",
       "==============================================================================\n",
       "Dep. Variable:                      y   R-squared:                       0.995\n",
       "Model:                            OLS   Adj. R-squared:                  0.995\n",
       "Method:                 Least Squares   F-statistic:                     3853.\n",
       "Date:                Mon, 09 Nov 2020   Prob (F-statistic):           1.89e-22\n",
       "Time:                        21:52:46   Log-Likelihood:                -29.445\n",
       "No. Observations:                  20   AIC:                             62.89\n",
       "Df Residuals:                      18   BIC:                             64.88\n",
       "Df Model:                           1                                         \n",
       "Covariance Type:            nonrobust                                         \n",
       "==============================================================================\n",
       "                 coef    std err          t      P>|t|      [0.025      0.975]\n",
       "------------------------------------------------------------------------------\n",
       "const          1.5804      0.479      3.298      0.004       0.574       2.587\n",
       "x1             5.0850      0.082     62.075      0.000       4.913       5.257\n",
       "==============================================================================\n",
       "Omnibus:                        1.296   Durbin-Watson:                   2.429\n",
       "Prob(Omnibus):                  0.523   Jarque-Bera (JB):                0.560\n",
       "Skew:                          -0.408   Prob(JB):                        0.756\n",
       "Kurtosis:                       3.073   Cond. No.                         11.5\n",
       "==============================================================================\n",
       "\n",
       "Warnings:\n",
       "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
       "\"\"\""
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#全部结果\n",
    "res.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "R-squared:R方值，评估线性回归方程好不好，主要看R方\n",
    "Adj. R-squared:\t调整后R方值\n",
    "Prob (F-statistic):检验是否可用线性回归方程，越小线性关系越强\n",
    "No. Observations:\t观察的样本\n",
    "const：常数项，对应β0\n",
    "x1：对应β1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.58035731,  4.256679  ,  6.9330007 ,  9.60932239, 12.28564409,\n",
       "       14.96196578, 17.63828748, 20.31460918, 22.99093087, 25.66725257,\n",
       "       28.34357426, 31.01989596, 33.69621766, 36.37253935, 39.04886105,\n",
       "       41.72518274, 44.40150444, 47.07782614, 49.75414783, 52.43046953])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#拟合的估计值\n",
    "y_ = res.fittedvalues\n",
    "y_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAFlCAYAAAAzqTv+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXxU1f3/8dfJggRBwyaSIItCU5EIgVg2FxQ0WixGXEBAcQNbl6r9GRW3asGCjUWqVr/iUlGxSBEjRW2oCKISlISAYYsoIiRRiZQg6ABZzu+PE1A0QJaZ3Fnez8eDx8zcuZP7yTyUN2e55xhrLSIiItK4orwuQEREJBIpgEVERDygABYREfGAAlhERMQDCmAREREPKIBFREQ8ENOYF2vTpo3t3LlzY15SRETEM3l5ed9Ya9vW9F6jBnDnzp3Jzc1tzEuKiIh4xhjzxcHeUxe0iIiIBxTAIiIiHlAAi4iIeKBRx4BrUl5eTlFREbt37/a6lIBp2rQpHTp0IDY21utSREQkSHgewEVFRbRo0YLOnTtjjPG6HL+z1rJt2zaKioro0qWL1+WIiEiQ8LwLevfu3bRu3ToswxfAGEPr1q3DuoUvIiJ153kAA2EbvvuE++8nIiJ1FxQBHEzuv/9+Hn744YO+n5WVxdq1axuxIhERCUchF8BZ+cUMnPIOXe58g4FT3iErv7hxr68AFhERPwipAM7KL2bC3AKKy3xYoLjMx4S5BQ0O4QcffJCkpCSGDBlCYWEhAE8//TSnnHIKPXv25KKLLuL7779n6dKlzJs3j4yMDHr16sVnn31W43kiIiKHE1IBnJldiK+88oBjvvJKMrML6/0z8/LymDVrFvn5+cydO5fly5cDMHz4cJYvX86qVas48cQTefbZZxkwYADDhg0jMzOTlStXcsIJJ9R4noiIhKCcHJg82T02As9vQ6qLkjJfnY7XxnvvvceFF15Is2bNABg2bBgAq1ev5p577qGsrIxdu3aRlpZW4+dre56IiASxnBwYPBj27oUmTWDhQujfP6CXDKkWcEJ8XJ2O11ZNs5SvvPJKHn/8cQoKCvjjH/940NuIanueiIgEr5K7/4T1+aCykorde1jz8ryAXzOkAjgjLYm42OgDjsXFRpORllTvn3n66afz2muv4fP52LlzJ//+978B2LlzJ+3bt6e8vJyZM2fuP79Fixbs3Llz/+uDnSciIqEhK7+YuRWtqDKGChNFeXQMk3YdE/BJviHVBZ2ekgi4seCSMh8J8XFkpCXtP14fvXv3ZsSIEfTq1YtOnTpx2mmnATBx4kT69u1Lp06dSE5O3h+6I0eOZNy4cTz66KPMmTPnoOeJiEiQW7IENm8msyiB4gGjeKdjCv22FLCsYzIr2v2CzdmFDcqXwzHW2oD98J9KTU21P90PeN26dZx44omNVoNXIuX3FBEJehUVMGkSTJwIPXpwQtpEKqOif3aaAT6fMrRBlzLG5FlrU2t6L6S6oEVERBq0HsSWLXDWWfDAAzBmDLz/Pse2al7jqQ2dX3Q4CmAREQkZDVoPYts2SEmB/Hx48UWYMQNatAjI/KLaUACLiEjIqNd6EFVV7rF1a9fyXbHCtX6rpackMnl4MonxcRggMT6OycOTAzr+CyE2CUtERCJbndeDWLcORo+Gxx6DgQPhhhtqPC09JTHggftTagGLiEjIqPV6ENbCM89Anz5QVAS++i/YFCgKYBERCRm1Gq/dsQNGjoRx42DAAFi1CoYMaeRKDy/iA7isrIwnnniiXp+dNm2aNl8QEWlEtRqvfeEFePVVt67zggXQvr1n9R5Kre4DNsZsAnYClUCFtTbVGNMKeAXoDGwCLrXWbj/UzwnG+4A3bdrE+eefz+rVq+v82c6dO5Obm0ubNm0Oe67Xv6eISFirqoLPPoNu3dzz1avh5JO9ruqQ9wHXZRLWmdbab370+k5gobV2ijHmzurXdzSgztrLyYHFi2HQoAYvln3nnXfy2Wef0atXL84++2yOOeYYZs+ezZ49e7jwwgt54IEH+O6777j00kspKiqisrKSe++9l6+//pqSkhLOPPNM2rRpw6JFi/zyq4mISB199RVcfjmsXAnr17vZzkEQvofTkFnQFwCDqp/PABbjjwAeNOjnxy69FK6/Hr7/3s1i+/hj9y+cqCj3Jd98M1x5JXzzDVx88YGfXbz4kJebMmUKq1evZuXKlSxYsIA5c+bw0UcfYa1l2LBhLFmyhNLSUhISEnjjjTcA2LFjB0cffTRTp05l0aJFtWoBi4hIAPznP3DFFbBrF/ztb9CqldcV1Vptx4AtsMAYk2eMGV99rJ219kuA6sdjAlHgz+zY8cM9XVVV7rWfLFiwgAULFpCSkkLv3r1Zv349GzZsIDk5mbfffps77riD9957j6OPPtpv1xQRkXp4/304/XQ47zxo1w5yc92kqxp2twtWtW0BD7TWlhhjjgH+a4xZX9sLVAf2eICOHTse/gOHarE2awYzZx64Z+PMmT90Q7dpc9gW76FYa5kwYQLXXXfdz97Ly8vjzTffZMKECZxzzjncd9999b6OiIg0QE4OnHOOu7UoJsbd49u9u9dV1VmtWsDW2pLqx63Aa8CvgK+NMe0Bqh+3HuSz0621qdba1LZt2za84v793UbJEyf6ZcPkH28vmJaWxnPPPceuXbsAKC4uZuvWrZSUlNCsWTPGjBnDbbfdxooVK372WRERaQQvvwxz5rhGGLj7fXNyvK2png7bAjbGHAlEWWt3Vj8/B/gTMA8YC0ypfnw9kIUeoH//BgfvPq1bt2bgwIH06NGD8847j1GjRtG/+mc3b96cl156iU8//ZSMjAyioqKIjY3lySefBGD8+PGcd955tG/fXpOwREQCadcuuPFGt37zBRe4HtB9PaE1zR0KAYe9DckYczyu1QsusF+21j5ojGkNzAY6ApuBS6y1/zvUzwrG25AaS6T8niIifpef7xbW2LAB7r3X/Vm+3G93wwRSg25DstZuBHrWcHwbMLjh5YmIiBzEokVw7rnQti28884PrV0/9oR6JeJXwhIRkSDWr5+7DXXlypDtaj4YBbCIiASXRYtc2O7cCXFx8Mgj7i6XMBMUAVyb5TBDWbj/fiIiflFR4cZ3Bw92q1t9/bXXFQWU5wHctGlTtm3bFrYhZa1l27ZtNG3a1OtSRESC1xdfwBlnwKRJbmXDvDzo2tXrqgKqIUtR+kWHDh0oKiqitLTU61ICpmnTpnTo0MHrMkREgteNN0JBgbvP97LLvK6mUXgewLGxsXTp0sXrMkREpLH5fO5Pq1bwxBPuvt4TTvC6qkbjeRe0iIhEoNWr4ZRT3EYK1sJxx0VU+IICWEREGpO18NRTLnxLS+H3vw+pDRT8yfMuaBERCU9Z+cVkZhdSUuYjIT6OuwYcy9BH74NXX3WbKbzwgtvJKEKpBSwiIn6XlV/MhLkFFJf5sEBxmY9Jrxfw/dIP4S9/gbfeiujwBQWwiIgEQGZ2Ib7ySvpsWcOTcx/klC2r+TK2OUN/9zRkZECU4kdd0CIi4nclZT4Gb/iQ6a9NItpaBn+2nJGjJpOfqE1p9tE/QURExO8u/nIlj837C1HViyxF2Sr6bS4gIT7O48qChwJYRET8KzOTzBfuYWuL1uyJjqXCRFEeHUP+8b3ISEvyurqgoS5oERHxryFD4JZb+HjEjfx5xpt0XZvLp91TGTF+OOkpiV5XFzRMY67BnJqaanNzcxvteiIi0kheeMFtGTh1qteVBBVjTJ61NrWm99QFLSIi9bdzJ1x+OYwdCytWwO7dXlcUMhTAIiJSP7m5kJLiNlB44AFYuBC081utaQxYRETqbtcuSEuDI4+ExYvhtNO8rijkKIBFRKT2tm+H+Hho3twtKXnyyW43I6kzdUGLiEjtvP02dO8O06e714MGKXwbQAEsIiKHVl4OEya4DRRatoQBA7yuKCyoC1pERA7u889h1ChYtgzGjYNp06BZM6+rCgsKYBERObjCQli/HmbPhksu8bqasKIAFhGRA333Hbz7Lvz613Duua4VHB/vdVVhRwEsIiJOTg7MmgWvvw4lJfDZZ3DccQrfAFEAi4gILF3qZjWXl7vXjz7qwlcCRrOgRUQinbVw3XU/hG90tFtoQwJKASwiEumMgTPOgNhYF75NmrjWsASUAlhEJBJVVrr1m994w71+/HE38WriRLemc//+3tYXATQGLCISabZsgTFjYMkSuPlmGDrUHe/fX8HbiBTAIiKR5PXX4eqrYc8et4fv5Zd7XVHEUhe0iEikWLoU0tOhc2fIz1f4ekwBLCIS7nw+99i/Pzz/vAvibt08LUkUwCIi4ctaeO456NIFPvnEzXYeOxaOOMLrygQFsIhIeNqxw22icM01bgvB5s29rkh+QpOwRETCzYcfwmWXwebN8OCDcMcd7v7eQ8jKLyYzu5CSMh8J8XFkpCWRnpLYSAVHJgWwiEgIqVVQvvgiVFW524xqsXdvVn4xE+YW4CuvBKC4zMeEuQUACuEAUhe0iEiI2BeUxWU+LD8EZVZ+MXz1Faxd607MzHSznGsRvgCZ2YX7w3cfX3klmdmFfv4N5McUwCIiIeJgQfnuYy9Bz56u27mqCuLioGXLWv/ckjJfnY6Lf6gLWkQkRPw0EGMry7ltyYtc99Fc6NEDXn4ZourerkqIj6O4hrBNiI+rd61yeApgEZEQsS8oexev46xPl3POhqX8YlsRc/sOY/iiWa7lWw8ZaUkHjAEDxMVGk5GW5K/SpQYKYBGREJGRlsQrj87muVl3E1tZgcEy9cwrOf6vk+odvvDDRCvNgm5cCmARkRCR3u1oTst/mSaVFUTbKipMFGknHctJfgjK9JREBW4j0yQsEZFQsHIl9OlD61W5RMfGQHQ0MU2P4KRRw7yuTOpJLWARkWBmLTz2GGRkQJs2sGiRW0py8WIYNEjbB4YwBbCISDCbPBnuvhvOPx/+8Q8XwqDgDQMKYBGRYFRRATExMG4ctGoF113nNlOQsKExYBGRYFJRAffeC2eeCeXl0LYt/Pa3Ct8wVOsANsZEG2PyjTHzq193McZ8aIzZYIx5xRjTJHBliohEgM2b3bjupEnQtasLYAlbdWkB3wys+9Hrh4BHrLXdgO3ANf4sTEQkosyd65aT/PhjmDnTjfc2a+Z1VRJAtQpgY0wHYCjwTPVrA5wFzKk+ZQaQHogCRUTC3t69MGECdOvmNlEYNcrriqQR1HYS1jTgdqBF9evWQJm1tqL6dRGgO7hFROpi3Tro1Mm1dBcsgPbtoYlG8yLFYVvAxpjzga3W2rwfH67hVHuQz483xuQaY3JLS0vrWaaISBixFqZPhz594L773LFOnRS+EaY2XdADgWHGmE3ALFzX8zQg3hizrwXdASip6cPW2unW2lRrbWrbtm39ULKISAjbvh0uvdTdVnTqqXDbbV5XJB45bABbaydYaztYazsDI4F3rLWjgUXAxdWnjQVeD1iVIiLhIC8PevWCrCx46CH4z3/g2GO9rko80pCFOO4AZhljJgH5wLP+KUlEJDxk5Rfz5vS5dF2by6fdU7nk3BTObtkSZs+Gvn29Lk88VqcAttYuBhZXP98I/Mr/JYmIhL6s/GJeeXQ2/3jpTppU7GXP0llcvXsK3z03n/TeHbwuT4KAVsISEQmAzOxChufO54iKvUQBsZUVpGxcSeaCT7wuTYKE1oIWEfG3PXu46tVHuWT1O1RhqDSG8ugYlnVMpqTM53V1EiQUwCIi/paezrW5/+H53ufzVtJA+hSvY1nHZFYknkhifJzX1UmQUACLiPiLtW7ThFtuYdk5l/DQ/xLwlVfyYcdkAOJio8lIS/K4SAkWGgMWEWmonTvh8svd3r0AaWn0u/VqJg9PJjE+DgMkxscxeXgy6SlaNFActYBFRBoiLw9GjoSNG+FPfzrgrfSURAWuHJRawCIi9VFVBVOnQv/+sHs3LF4Md9/tdVUSQtQCFhHB3bebmV1ISZmPhPg4MtKSDt16XbsWbr8dfvMbePZZaNWq8YqVsKAAFpGIl5VfzIS5BfjKKwEoLvMxYW4BwM9D+NNPoWtX6NEDPvwQevd2E69E6khd0CIS8TKzC/eH7z6+8koyswt/OFBeDnfdBUlJ8Pbb7lifPgpfqTe1gEUk4h1scYz9xzdtgssug2XL4Npr3bivSAOpBSwiES/hIItjJMTHwauvuh2M1q6FWbPg6afhyCMbuUIJRwpgEYl4GWlJxMVGH3Bs/6IZ27bBL38JK1fCiBEeVSjhSF3QIhLx9k202jcL+tTdX3JDuyj6pZwLvcbB1VdDjP66FP/Sf1EiIlQvmuH7Ah76G7z1FnTuDDdd4YJX4SsBoP+qREQAsrNh6FCorISoKHjkEQWvBJTGgEVEtm9347uV1bciGQMff+xtTRL2FMAiIi1bwqWXwhFHQHQ0NGkCgwZ5XZWEOQWwiESmoiI45xxYscK9nj4dFi2CiRNh4ULd6ysBpwEOEYk88+bBVVfBnj1ukY3evd3x/v0VvNJo1AIWkcixezfcdBNccAF06uRav8OHe12VRCgFsIhEjunT4fHH4ZZbICcHfvELryuSCKYuaBEJb9bC11/DscfC9ddDz55wxhleVyWiFrCIhLFvv4XRo90Y77Zt7r5eha8ECQWwiISnjz6ClBSYPRtuuAHi472uSOQACmARCS9VVZCZCQMHQkUFLFkCd9/t7u8VCSIKYBEJL8bA4sVupvPKlTBggNcVidRIk7BEJDwsWABJSe72on/9C+LiXBiLBCm1gEUktO3dC7ffDmlpcP/97lizZgpfCXpqAYtI6Nq4ES67zE24uu46mDrV64pEak0BLCKhJycHZsyAF190GyfMmQMXXeR1VSJ1ogAWkdCSkwODB7uuZ3AhrOUkJQRpDFhEQsfKlTBunAvffXv3FhZ6W5NIPSmARST4WQuPPgp9+7plJWNjtW+vhDx1QYtIcPvmG7j6avj3v+H88+Ef/4ANG9y9voMGaftACVkKYBEJbldfDdnZMG0a/P737vaiNm0UvBLyFMAiEnwqKtzevc2bu1uLvv3WbaggEkYUwCISXDZvdjsYHXus20iha1evKxIJCE3CEpHg8dpr0KsXrFoFF16o1awkrCmARcR7Ph9cf727n/eEEyA/H0aN8roqkYBSAIuI98rK4NVX4bbb4IMPXAiLhDmNAYtIwGTlF5OZXUhJmY+E+Dgy0pJIT0l0b1rrbi0aOhTat4f166FlS28LFmlECmARCYis/GImzC3AV+5WrCou8zFhbgEA6V2OhPHj3baBL74IY8bUOnwPGeoiIURd0CISEJnZhfvDdx9feSVvTp/rJlq99hpMmVKnsd59oV5c5sPyQ6hn5Rf7uXqRwFMAi0hAlJT5fnZs1Mq3eOKpW9zs5vfegzvugKja/zV0sFDPzNZ60BJ61AUtIgGREB9HcZmP3sXr6Le5gGUdk1nfpjPvnDyIcxa/CvHxdf6ZNYX6oY6LBDMFsIgEREZaEq88Opvn/zmB2MoK9sQ04eoxU/j+Hy/UK3zhh1Cv6bhIqFEXtIgERHr3Njye/0+OqKwgCoitrOCe5lsbNGEqIy2JuNjoA47FxUaTkZbUwGpFGp8CWET8b8MGGDCA1quWQ0wMREcT0/QITho1rEE/Nj0lkcnDk0mMj8MAifFxTB6erFnQEpLUBS0i/vX993DqqVBe7mY6t2vn160D01MSFbgSFg4bwMaYpsAS4Ijq8+dYa/9ojOkCzAJaASuAy621ewNZrIgEsd27oWlTaNYMnn4aUlLguOPce9o6UORnatMFvQc4y1rbE+gFnGuM6Qc8BDxire0GbAeuCVyZIhLU8vLg5JPhpZfc62HDfghfEanRYQPYOruqX8ZW/7HAWcCc6uMzgPSAVCgiwctaeOQR18L1+aBTJ68rEgkZtZqEZYyJNsasBLYC/wU+A8qstRXVpxQBNQ7KGGPGG2NyjTG5paWl/qhZRIJBaSmcfz784Q/w61/DypVw2mleVyUSMmoVwNbaSmttL6AD8CvgxJpOO8hnp1trU621qW3btq1/pSISXN5/HxYuhMcfd5OtWrf2uiKRkFKnWdDW2jJjzGKgHxBvjImpbgV3AEoCUJ+IBJPycvjoIxg4EC68ED77DBI1I1mkPg7bAjbGtDXGxFc/jwOGAOuARcDF1aeNBV4PVJEiEgQ2bYLTT4czz4QvvnDHFL4i9VabFnB7YIYxJhoX2LOttfONMWuBWcaYSUA+8GwA6xQRL/3rXzBunJt09eKLmmwl4geHDWBr7cdASg3HN+LGg0UkXFkL118P//d/0Lcv/POf0KWL11WJhAWthCUiwCE2um/Txm0bOHEixMZ6XaZI2FAAi8j+je595ZVgLWcuepXX1nSEP4wh/U9/cvv3iohfKYBFZP9G96dtzOOeRc+S9M1m/tVjCJnZp2jdZZEAUQCLCCVlPkblv8mkBU9ggPKoaP7Z8xxtdC8SQNqOUEQY8u0mJi14EgPuj7X027JaG92LBJACWCSSVVYCMPTaC3gp9TfsjmlChYmiPDqG/ON7aaN7kQBSF7RIpJo/H269Fd5+m/Tencia/gQ3T59L17W5fNo9lRHjh2v8VySAFMAikWbPHrj9dnj0UejVyy0vSfVG90/e5HFxIpFDXdAikaSwEPr1c+F7882wbBl07ep1VSIRSS1gkUjy8MOwZQv8+99uK0ER8YxawCLh7ttv4fPP3fOpU2HVKoWvSBBQAIuEs+XLISUFhg+Hqipo0UI7GIkECQWwSDiqqnLdzQMGQEUFPP44ROl/d5FgojFgkXCzfTtcdhlkZ7uW7zPPQMuWXlclIj+hfxKLhJtmzWDXLreF4Jw5Cl+RIKUWsEg4KC+HzEy3d298PCxZoi5nkSCnABYJdRs3ui7njz6Cdu3gmmsUviIhQAEsEopycmDxYtfy/etfXeD+619w8cVeVyYitaQAFgk1OTkweDDs3g3WQnKyW1ijUyevKxOROlA/lUiIWTPzdSp27wFrqcKw9rRzFb4iIUgBLBIqrOXjOyayJ2se5dExVJgo9sTEMvH79mTlF3tdnYjUkbqgRULBtm1w9dWcPG8eC084hWuG30evrz5hWcdkVrT7BZuzC7V1oEiIUQCLBLt334XRo6G0lAcGj+MffYaBMSzt0mv/KSVlPg8LFJH6UACLBFBWfjGZ2YWUlPlIiI8jIy2pbi3V8nK46iq3uEZODgsWlEENYZsQH+fHqkWkMWgMWCRAsvKLmTC3gOIyHxYoLvMxYW5B7cZri4pgzx6IjYX58yEvD3r3JiMtibjY6ANOjYuNJiMtKTC/hIgEjAJYJEAyswvxlVcecMxXXklmduGhP5iVBSefDH/8o3vdvbvbxQhIT0lk8vBkEuPjMEBifByThydr/FckBKkLWiRADjYue9DxWp8PbrsNnngC+vRxK1rVID0lUYErEgbUAhYJkIONy9Z4fP166NvXhe8f/gBLl0K3bgGuUES8pAAWCZA6jddWVMC338Kbb7qlJZs0aaQqRcQr6oIWCZB93cQHnQW9YwfMmgXXXQc9esCGDW7SlYhEBAWwSAAddLx22TK3g9GWLXD66XDiiQpfkQijLmiRxlRVBVOmwKmnutfvv+/CV0QijlrAIo1pxAiYMwcuvRSeegri472uSEQ8ogAWCbR9e/cOGgQjR0JamrvFyBivKxMRDymARQJpyRK3d29lJTRtCgsXwkUXeV2ViAQBjQGLBMqnn7qJVhUVYC3s3etawiIiKIBFAuOllyAlBXbudPf0Rke7x0GDvK5MRIKEuqBFqjV456J91qyBK65wM51nznQbK+wbA+7f399li0iIUgCL8MPORfs2T9i3cxFQ+xDeuhWOOQZOOgkWLHCBGxMDxx2n4BWRn1EXtAgN2LkI3PjutGnQqRO8+647NmSIC18RkYPQ3xAi1GPnon1KS+Gqq+CNN2DYMLekpIhILagFLEIddy7aZ9Ei6NkT/vtfeOwxt49v69YBqlBEwo0CWIQ67ly0T34+HHUUfPQR3HijFtYQkTpRAIvgJlpNHp5MYnwcBkiMj2Py8OSfT8DatAneecc9v+UWWLHCtYJFROpIY8Ai1Q66c9E+c+bAtde69Zv3bR3YrFnjFSgiYUUtYJHD+f57t2fvJZdAUpJrAWvrQBFpILWARQ5lxw4YONAtrnHHHTBxosJXRPxCASxyKEcfDeecA1OnukcRET9RF7TIT23fDmPGwNq17rXCV0QC4LABbIw5zhizyBizzhizxhhzc/XxVsaY/xpjNlQ/tgx8uSIB9tRT0KULzJoFubleVyMiYaw2LeAK4P9Za08E+gE3GGO6A3cCC6213YCF1a9FQlNlJYwfD7/9rRv3jYmBbt28rkpEwthhA9ha+6W1dkX1853AOiARuACYUX3aDCA9UEWKBNyTT8LTT//wuqJCe/eKSEDVaQzYGNMZSAE+BNpZa78EF9LAMQf5zHhjTK4xJre0tLRh1Yr4286d7nHcOHjwQYiL0969ItIoah3AxpjmwKvALdbab2v7OWvtdGttqrU2tW3btvWpUcT/9uxxK1n17AllZXDEEXDXXbBwobvVaOFCbSEoIgFVq9uQjDGxuPCdaa2dW334a2NMe2vtl8aY9sDWQBUp4leffAIjR7q1nH//e2ja9If3+vdX8IpIo6jNLGgDPAuss9ZO/dFb84Cx1c/HAq/7vzwRP7IWZsyA3r1h82aYNw/+9rcDA1hEpJHUpgU8ELgcKDDGrKw+dhcwBZhtjLkG2AxcEpgSRfzEWnj+eUhNhZkzIfEQ6z6LiATYYQPYWvs+cLB91gb7txyRAMjNdWHbvj3Mneu2EIyOPvznREQCSCthSfiqqoKHH3Zjunfc4Y61bKnwFZGgoLWgJTxt3Qpjx8J//gMXXgjTpnldkYjIARTAEn5WrIChQ92azk8+6bYSNAcbRRER8Ya6oCX8dOkCvXrB8uVuaUmFr4gEIQWwhIfPP3drOe/d68Z533oLkpO9rkpE5KAUwBL6XnnFtXhnz4Y1a7yuRkSkVjQGLKEpJwcWLHC3GM2f72Y6v/wydO7sdWUiIrWiAJbQk5MDgweDz+deX3EFPPMMxMi64lsAABCOSURBVMZ6W5eISB2oC1pCi7WsfXEuFbv3AFBpDGuOSlD4ikjIUQBL6Ni2jS/POo+tC96lPDqGChPF3uhYJu06hqz8Yq+rExGpE3VBS2hYsgRGj6bNl1/xzBlX8mi/S+m3pYBlHZNZ0e4XbM4uJD1FazuLSOhQAEtwq6iASZPcHr3HH8/wMQ9TcGxXAFZ0OHH/aSVlPq8qFBGpF3VBS3D78ku3jOTo0bBiBf/7Zc339ibExzVyYSIiDaMAluC0dKnbPvC44+Djj+GFF6BFCzLSkoiLPXAzhbjYaDLSkjwqVESkfhTAElx274abboKBA+Gll9yxjh33v52eksjk4ckkxsdhgMT4OCYPT9b4r4iEHI0BS/BYtw5GjnQt3ltvhUsvrfG09JREBa6IhDwFsASHWbPgmmugWTN44w349a+9rkhEJKDUBS3BoU0bGDAAVq1S+IpIRFAAi3c+/BAee8w9HzLEre2ckOBtTSIijUQBLI2vqgoeeghOPdXdYvT99+649u0VkQiiMWAJqKz8YjKzCykp85EQH8c9fVpy3l9uh7ffhksugenT3biviEiEUQBLwGTlFzNhbgG+8koAvikto9dFI6go30XM9Olw7bVq9YpIxFIAS8BkZhfiK6+kz5Y19C1aw7KOyTx0xli+6dqdl8Zd7XV5IiKeUgBLwJSU+Thv/fv8/fWHsMDemFhGj3yQ/CPaeV2aiIjnNAlLAmbspqVMm/8wBks0ltjKCvptLtC6zSIiKIAlEHbtgquu4v5X/szG1sexJyaWChNFeXQM+cf30rrNIiKoC1oC4c03YcYMuO8+Pjn/ah55bh5d1+byafdURowfrmUkRUQAY61ttIulpqba3NzcRrueNCJrYe1aOOkk93zdOuje3euqREQ8ZYzJs9am1vSeuqCl4UpL4Te/gVNOgU2b3K1FCl8RkUNSF7Q0zKJFMHo0bNsGDz8MnTp5XZGISEhQC1jqx1q47z4YPBiOOsqt63zTTVpYQ0SklhTAUj/GwLffwlVXQV4e9OrldUUiIiFFXdBSN6++Ch06QN++MHUqROnfcCIi9aG/PaV2fD747W/h4ovhr391xxS+IiL1pr9B5fBWr3YznJ96CjIy4KWXvK5IRCTkqQtaDi0vz+3be9RRkJ0N55zjdUUiImFBLWCp2b4FWnr1gltvhVWrFL4iIn6kAJYD5eS4sd6TToKvvoLoaPjzn+HYY72uTEQkrKgLWn7w/vtw1llQXu5uM3r7bRgzxuuqRETCklrA4pSUwNixLnzBzXDessXbmkREwphawOLcey8UF0NsLFRVQZMmMGiQ11WJiIQtBXAk27MHtm9347uZme4Wo+3bYfFiF779+3tdoYhI2FIAR6pPPoGRIyEmBpYtg1at3B9Q8IqINAKNAUeiF16A3r3hiy/gnnu0opWIiAfUAo4ku3bB737nVrI64wz32KHD/rez8ovJzC6kpMxHQnwcGWlJpKckeliwiEj4UtMnkkRFuQU1HngAFi78WfhOmFtAcZkPCxSX+Zgwt4Cs/GLv6hURCWMK4HBXVQXTp7vWb7NmkJvr9vGNjj7gtMzsQnzllQcc85VXkpld2JjViohEDAVwONu6FYYOheuugxkz3LEmTWo8taTMV6fjIiLSMArgcPX229CzJyxaBE88Addff8jTE+Lj6nRcREQa5rABbIx5zhiz1Riz+kfHWhlj/muM2VD92DKwZUqdPP202zihZUtYvtxNvDLmkB/JSEsiLvbAbum42Ggy0pICWamISMSqTQv4eeDcnxy7E1hore0GLKx+LY0kK7+YgVPeocudbzBwyjs/nyg1ZAjceKMb701OrtXPTE9JZPLwZBLj4zBAYnwck4cnaxa0iEiAGLtv27lDnWRMZ2C+tbZH9etCYJC19ktjTHtgsbX2sE2l1NRUm5ub27CKI9y+2co/njAVFxvNjOab+NXqD9w9vodp7YqISOMwxuRZa1Nreq++9wG3s9Z+CVAdwsfUuzqpk5/OVo7bu5v73prOrz5eAP36wY4dEB/vYYUiIlIbAV+IwxgzHhgP0LFjx0BfLuztm5Xcu3gdv1m3hLM/WUbCzm/4e79LuGHJTLeZgoiIBL36BvDXxpj2P+qC3nqwE62104Hp4Lqg63k9qZYQH0e7NSuYOetumlbsBeD+weN5e8gIblD4ioiEjPrehjQPGFv9fCzwun/KkcO5q387Ti8qILayAgNUmiiOrtqr2coiIiGmNrch/RPIAZKMMUXGmGuAKcDZxpgNwNnVryXQ3nuPoZefR/rRe6iIiaXCRFERE0ufKy7UbGURkRBTq1nQ/qJZ0PVUWQkPPujWcO7SBWbNgvJy7dsrIhLkAjELWhpLURGMHg1LlrjHJ56Ao45y7yl4RURClgI42H31FRQUuLWcr7jC62pERMRPFMDBaPdumD8fLr4YUlPhiy+gRQuvqxIRET/SZgzBZv16t6DGJZfA6urltxW+IiJhRwEcLKyF556DPn2guBjeeAN69PC6KhERCRAFcLAYPx6uuQb69oVVq+DXv/a6IhERCSCNAQeLU0+Fzp3hzjshOvqwp4uISGhTAHulqgoefhjatoWrroKxYw//GRERCRvqgvbCV1/BuefCHXe4xTRERCTiKIAbW3Y29OwJ770HTz0Fzz/vdUUiIuIBdUEHWFZ+MZnZhZSU+ei3t5SXp12NOekkeOcdOOkkr8sTERGPqAUcQFn5xUyYW0DHlTn8Lmc2e0q/4dYLJzBv+msKXxGRCKcWcABlZhcybtGL3PrBy1Rh2BsTy+iRD/LQu5sZ1r+r1+WJiIiH1AIOlF27uGXmZP7wwcsARGOJrayg3+YCSsp8HhcnIiJeUwAHwsqV0KcPF61ZyCvJQ9gd04QKE0V5dAzLOiaTEB/ndYUiIuIxdUEHwvz5sGsXS/9vFvdvOYpXeqbRb3MByzoms65zDyanJXldoYiIeMxYaxvtYqmpqTY3N7fRrteovvkGNm6EX/0KKiuhrAxatz5gFnRCfBwZaUmkpyR6Xa2IiDQCY0yetTa1pvfUAvaHxYth9Gi3hOSnn0KTJtC6NQDpKYkKXBER+RmNATdERQXcdx+cdRY0bw6vv+7CV0RE5DDUAq6vb7+FoUPh/ffhyivhscdcCIuIiNSCAri+WrSAE06A3/0ORo3yuhoREQkx6oKuC58Pbr0VPvsMjHHrOCt8RUSkHhTAtbVmjZvhPG2a21BBRESkARTAh2MtPP00nHIKbN0Kb70F11/vdVUiIhLiFMCH8/TTMH48DBwIq1a5fXxFREQaSJOwDmbvXndL0ejRUFXlQjhK/14RERH/UAD/WE6O26d3yxb44ANYtgyOPBJ++1uvKxMRkTCjAN4nJ8ctqLF7t3s9eLBbUlJERCQA1Kda7Ys/T8VWh28lhjW/TIWjjvK4KhERCVcKYCArbwt7li3HYqgwUeyNiWXSd+3Iyi/2ujQREQlTkd0FvWEDtGpF5n83sHfEJI7/XxF9itexrGMyK9r9gs3ZhdpIQUREAiJyA/jFF939vBdeSEnCCGzzlpQ2b8mHHZP3n1JS5vOwQBERCWeR1wW9cydcfjlccQX07g0PPkhCfFyNpx7suIiISENFVgCvXetC9+WX4f773S1Hxx1HRloScbHRB5waFxtNRlqSN3WKiEjYi6wu6NatoWVLWLwYTjtt/+F947yZ2YWUlPlIiI8jIy1J478iIhIwxlrbaBdLTU21ubm5jXY9wK3fPG0a/OlPEBPj1nY2pnFrEBGRiGSMybPWptb0Xnh3QS9cCD17wtSpsGKFO6bwFRGRIBCeAVxeDnfdBWef7bqcP/rIbSUoIiISJMJzDPjKK91Eq2uvdd3PRx7pdUUiIiIHCK8ArqpyOxbdcgsMGwYjRnhdkYiISI3CI4C//x5uvhmaNoXHHoNTTnF/REREglRIBnBWfvH+W4ZO3f0lf5/3F476fAPceadmOYuISEgIuQDOyi9mwtwCTvx8NX/8cA6DNuayo9lRfPDEywz83WVelyciIlIrIRfAmdmFnLhpNS+/cjdHVOylyhgy0n7Phh3t+MDr4kRERGop5G5DKinz0W9zATGVFRjAYuhe+rk2ThARkZAScgGcEB/Hso7JlEfHUGGiKI+OYVnHZG2cICIiISXkuqAz0pKY8N1eRo98kH6bC1jWMZl1nXswWRsniIhICAm5AP5h44QmPJl4IgnxcUzWxgkiIhJiQi6AwYWwAldEREJZyI0Bi4iIhIMGBbAx5lxjTKEx5lNjzJ3+KkpERCTc1TuAjTHRwN+B84DuwGXGmO7+KkxERCScNaQF/CvgU2vtRmvtXmAWcIF/yhIREQlvDQngRGDLj14XVR87gDFmvDEm1xiTW1pa2oDLiYiIhI+GBHBNOx7Ynx2wdrq1NtVam9q2bdsGXE5ERCR8NCSAi4DjfvS6A1DSsHJEREQiQ0MCeDnQzRjTxRjTBBgJzPNPWSIiIuGt3gtxWGsrjDE3AtlANPCctXaN3yoTEREJYw1aCcta+ybwpp9qERERiRjG2p/NmwrcxYwpBb7w449sA3zjx58XifQdNpy+Q//Q99hw+g4bzt/fYSdrbY0zkBs1gP3NGJNrrU31uo5Qpu+w4fQd+oe+x4bTd9hwjfkdai1oERERDyiARUREPBDqATzd6wLCgL7DhtN36B/6HhtO32HDNdp3GNJjwCIiIqEq1FvAIiIiISlkA1h7ETeMMeY4Y8wiY8w6Y8waY8zNXtcUqowx0caYfGPMfK9rCUXGmHhjzBxjzPrq/x77e11TqDHG3Fr9//FqY8w/jTFNva4pFBhjnjPGbDXGrP7RsVbGmP8aYzZUP7YM1PVDMoC1F7FfVAD/z1p7ItAPuEHfYb3dDKzzuogQ9jfgP9baXwI90XdZJ8aYROD3QKq1tgduZcKR3lYVMp4Hzv3JsTuBhdbabsDC6tcBEZIBjPYibjBr7ZfW2hXVz3fi/tL72XaScmjGmA7AUOAZr2sJRcaYo4DTgWcBrLV7rbVl3lYVkmKAOGNMDNAMbYxTK9baJcD/fnL4AmBG9fMZQHqgrh+qAVyrvYildowxnYEU4ENvKwlJ04DbgSqvCwlRxwOlwD+qu/GfMcYc6XVRocRaWww8DGwGvgR2WGsXeFtVSGtnrf0SXEMFOCZQFwrVAK7VXsRyeMaY5sCrwC3W2m+9rieUGGPOB7Zaa/O8riWExQC9gSettSnAdwSwyy8cVY9RXgB0ARKAI40xY7ytSmojVANYexH7gTEmFhe+M621c72uJwQNBIYZYzbhhkHOMsa85G1JIacIKLLW7ut9mYMLZKm9IcDn1tpSa205MBcY4HFNoexrY0x7gOrHrYG6UKgGsPYibiBjjMGNu62z1k71up5QZK2dYK3tYK3tjPtv8B1rrVoedWCt/QrYYoxJqj40GFjrYUmhaDPQzxjTrPr/68FoIltDzAPGVj8fC7weqAs1aDtCr2gvYr8YCFwOFBhjVlYfu6t6i0mRxnQTMLP6H9Mbgas8riekWGs/NMbMAVbg7m7IRyti1Yox5p/AIKCNMaYI+CMwBZhtjLkG94+bSwJ2fa2EJSIi0vhCtQtaREQkpCmARUREPKAAFhER8YACWERExAMKYBEREQ8ogEVERDygABYREfGAAlhERMQD/x+WYC54FZk9dwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(8,6))\n",
    "ax.plot(x,y,'o',label='data')  # 原始数据\n",
    "ax.plot(x,y_,'r--.',label='test')  #拟合数据\n",
    "ax.legend(loc='best')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到非常接近原始值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
